Zum Hauptinhalt springen
  1. Posts/

Karte der TfL Zonen London

·1220 Wörter·6 min
Karte von London mit mehreren Punkte (Stationen) und Linien
Karte von London. Kartenmaterial: © OpenStreetMap contributors, © CARTO

Vor einiger Zeit habe ich eine Karte der TfL-Zonen in London erstellt und möchte hier dokumentieren, wie ich dabei vorgegangen bin.

Zunächst einmal die wichtigste Information: Die Karte befindet sich unter https://umap.openstreetmap.de/de/map/london-tfl-zones_78601.

Warum?

Nun, weil ich eine Information grafisch aufbereitet haben wollte, die ich auf der Webseite der TfL nicht gefunden habe. Die meiner Unterkunft am nächsten gelegene Tube-Station befindet sich in Zone 3 und somit kostet mich die Fahrkarte mehr, als wenn sie in Zone 1 oder 2 liegen würde. Lohnt es sich ein paar hundert Meter weiter zu einer Station zu laufen, die noch in der günstigeren Zone liegt? Wo genau verläuft die Grenze zwischen den Tarifzonen? Und wenn ich dann einsehe, dass ich wirklich Zone 3 benötige: Welche möglichen weiteren Ziele liegen in der Zone? Die berühmte Karte des Londoner Tube-Netzes ist hervorragend geeignet, um die Linienverläufe einfach erkennbar zu machen, doch auf diese Fragen fand ich keine Antwort.

Eine ähnliche Karte habe ich bereits mit Google-Karten gefunden, dort sind aber nur die Zonen selbst über die Karte gelegt, die Linienverläufe jedoch nicht. Auch die Marker für die Stationen innerhalb der Zonen 1-3 sind nicht vorhanden.

Erstellen der Punkte für die Stationen

In einem ersten Schritt ging es darum alle Stationen zu bekommen mit der Information in welcher Zone sie liegen. Glücklicherweise sind die Tube-Stationen in London in OSM gut und vor allem konsistent gepflegt, es gibt ein Attribut “fare_zone”.

Der erste Versuch, dies über Overpass Turbo zu lösen, sah noch so aus:

1
2
3
4
[out:json][timeout:25];
{{geocodeArea:London}}->.searchArea;
node["fare_zone"="1"](area.searchArea);
out geom;

Hier ist die zugehörige Ausgabe1:

mehrere Punkte auf einer OSM-Karte im Zentrum von London
grafische Ausgabe der Abfrage. (Copyright)
Vier Zeilen mit einem auf den ersten Blick plausibel aussehenden Ergebnis. Herzlich Glückwunsch, für vibe-coding2 reicht diese Qualität aus.

Sind das also die Stationen, die in Zone 1 liegen? Welche Fallstricke sind da drin? Zoomen wir doch ein wenig heran:

mehrere Punkte auf einer OSM-Karte im Zentrum von London, ein roter Kreis weist auf eine Fläche hin, die keine Ergebnisse hat
grafische Ausgabe der Abfrage, etwas näher. (Copyright)
Zunächst einmal fällt einem ein größerer Bereich ins Auge, der keine Suchergebnisse beinhaltet, obwohl dort Stationen liegen (rot eingekreist). In der zweiten Zeile der Abfrage wird als searchArea “London” festgelegt, doch London ist nicht einfach London. Dieser Bereich ist die “City of London”, welche einen Sonderstatus hat und somit vom Gebiet “London” nicht erfasst wurde.

Auch nachdem ich das Gebiet entsprechend erweitert habe und danach auch die Stationen innerhalb der City of London bekommen habe, war die Zone 1 dennoch unvollständig. Die Abfrage zeigt mir nämlich nur die Ergebnisse, bei denen das Attribut “fare_zone” exakt den Wert “1” hat. Einige Stationen liegen allerdings auf der Grenze zu Zone 2, das Attribut hat dort den Wert “1;2”, was in der ursprünglichen Abfrage nicht berücksichtigt wurde. Dieser Fehler ist mir erst später aufgefallen.

Mit diesem Wissen habe ich nun mehrere Abfragen erstellt, bei denen ich jeweils den Wert für die “fare_zone” angepasst habe, das Ergebnis der Abfragen als GeoJSON heruntergeladen und in umap als neue Ebene hochgeladen.

Linien einzeichnen

Tube / London Underground

Nachdem ich alle Stationen eingetragen habe, möchte ich als nächstes wissen welche Linie wo entlangfährt. Hierfür habe ich erstmal den einfachsten Weg gewählt (der natürlich später wieder zu Problemen führen sollte):

1
2
3
4
[out:json][timeout:25];
{{geocodeArea:Great Britain}}->.searchArea;
way["line"="Bakerloo"](area.searchArea);
out geom;

Einfach alle Linien nacheinander abfragen, statt einer node wird nun nach einem way gesucht. Im Beispiel oben hat das noch gut funktioniert. Aber auch hier haben sich zwei Fehler eingeschlichen.

Für die District Line sieht das Ergebnis der Abfrage so aus:

Karte von London mit Markierungen. Die Linie ist im Zentrum der Stadt unterbrochen.
grafische Ausgabe der Abfrage für die District Line. (Copyright)
Sowohl die Arme am westlichen als auch am östlichen Ende sind sichtbar, der Bereich in der Mitte ist überwiegend nicht vorhanden. (Gelegentlich sind ein paar Meter Gleis eingezeichnet.) Der Fehler war derselbe wie schon oben bei den Stationen, die in mehreren Zonen lagen. Überall dort, wo mehrere Linien auf denselben Gleisen unterwegs waren, war dieser Bereich nicht in den Ergebnissen. Also statt dem Gleichheitszeichen bei “line"=“District” eine Tilde genutzt. Zeile 3 muss somit

way["line"~"District"](area.searchArea);

lauten.

Elizabeth Line und DLR

Das bisherige Verfahren hat ganz gut funktioniert. Zumindest bis ich zur vor ein paar Jahren neu eröffneten Elizabeth Line kam. Diese hat eine Sonderrolle und gehört nicht zum regulären Tube-Netz, auch wenn innerhalb der 9 Tarifzonen die normalen Tickets gültig sind. Da die Linie auch auf der offiziellen Tube-Map verzeichnet war, wollte ich sie ebenfalls auf meiner Karte haben. Doch die Abfrage nach

way["line"~"Elizabeth"](area.searchArea);

brachte keine Ergebnisse. Im Gegensatz zu den regulären Linien ist diese zwar nicht als way, aber als relation auffindbar. Zeile 3 lautet nun:

relation["name"~"Elizabeth line"](area.searchArea);

Mit der Relation habe ich allerdings neben den Gleisen auch wieder alle Stationen mit drin. Diese habe ich manuell wieder rausgelöscht bzw. dort, wo die Elizabeth Line außerhalb von Zone 9 fährt in einer eigenen Ebene als Punkte hinzugefügt.

Beim Einfügen der Daten für DLR hat sich herausgestellt, dass auch dort einige Bahnhöfe fehlen. Hatte ich oben erwähnt, dass die OSM-Daten konsistent seien? Ja, aber nur für die Tube. Nun, die “fare_zone” ist nur bei vereinzelten DLR-Stationen gepflegt. Auch hier wurde daher die Relation mitsamt den Stationen über Overpass Turbo heruntergeladen und bei umap hochgeladen, anschließend die neuen Stationen in die entsprechende Kartenebene verschoben.

London Overground

Die vor kurzem umbenannten Linien von London Overground wurden ebenfalls hinzugefügt, für die Übersichtlichkeit aber standardmäßig ausgeblendet. Die Abfrage nach der Relation liefert bei den meisten Stationen auch Marker für die Halteposition, an einigen Stellen fehlen sie jedoch. Hier war manuelle Nacharbeit erforderlich.

Feinarbeiten

Nachdem alle Daten aus Overpass Turbo exportiert und auf umap.openstreetmap.de in jeweils einzelne Ebenen importiert wurden, waren noch einige Feinarbeiten erforderlich.

unerwünschte Objekte

Die Abfragen für die Linien beinhalten teilweise einzelne Objekte, die nicht zum Linienverlauf gehören. So befindet sich zum Beispiel ein Gebäude in der Abfrage zur District line, welches früher mal die Station Osterley & Spring Grove war, bis diese vor 90 Jahren geschlossen wurde.

Kartenausschnitt eines Gebäudes mit den zugehörigen Daten. Das Haus ist als line=District markiert.
Station ‘Osterley & Spring Grove’. (Copyright)

Aber auch auf anderen Linien sind teilweise Gebäude in den Ergebnissen enthalten, oftmals die Depots.

Farben

Für die Routen ist es praktisch, wenn die Farben konsistent sind. Die TfL selbst hat ihre Design-Richtlinien zu einem großen Teil öffentlich zugänglich, die Farbcodes sind allerdings nicht im Hex-Format angegeben. Macht nichts, eine Umrechnung von RGB zu Hex ist ja problemlos möglich. Oder aber man nimmt die in den jeweiligen Routen bei OSM bereits hinterlegten Farbcodes. Stationen, die nur in einer Zone liegen haben eine Farbe aus dem Bereich der Progress Pride Flag bekommen. Stationen, die in zwei Zonen liegen sind in grau dargestellt und alles außerhalb von Zone 9 in schwarz.

Strichstärken

An einigen Stellen musste die Strichstärke manuell angepasst werden, da die Linien sich überschneiden und sonst gar nicht mehr sichtbar sind. Das gelb der Circle Line wurde etwas breiter gemalt, damit man es unter der grünen Linie der auf weiten Strecken gleich verlaufenden District Line noch sehen kann. Auch bei der “Hammersmith & City Line” wurde getrickst, hier durch eine gestrichelte Linie.

Noch auf der To-Do-Liste

Aktuell sind nur die Linien der Tube, von London Overground (zwecks Übersichtlichkeit standardmäßig ausgeblendet, aber vorhanden) sowie DLR und Elizabeth Line auf der Karte. In der Zukunft könnten noch die regionalen Zugverbindungen von anderen Betreibern dazukommen.


  1. Hinweis zum Urheberrecht: Alle Screenshots dieses Blogposts beinhalten Kartenmaterial von OpenStreetMap, © OpenStreetMap contributors. ↩︎

  2. Vibe-Coding: Füttern einer KI mit einem Prompt, die einem den passenden Code ausgibt und diesen meist ungeprüft übernehmen, ohne ihn zu verstehen. (mehr dazu im Artikel “Vibe-Coding” bei Wikipedia↩︎